package com.atguigu.common.result;


import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * 返回结果类型
 *    统一封装
 */
@Data
public class R extends HashMap<String, Object>{
    private static final long serialVersionUID = 1L;
    /**
     * 构造函数私有化
     */
    // private R(){
    //     put("code", 0);
    //     put("message", "success");
    // }

    private R(Integer code, String msg){
        put("code", code);
        put("message", msg);
    }

    /**
     * 返回成功结果
     * @return
     */
    public static R ok(){
        return  new R(0, "success");
    }
    /**
     * 成功状态码是一致的，不同的是提示信息可能不一样
     * @param message
     * @param message
     * @return
     */
    public static  R ok(String message){
        R r = new R(0, message);
        return r;
    }

    /**
     * 默认未知错误
     * @return
     */
    public static  R error(){
        R r = new R(ResponseEnum.ERROR.getCode(), ResponseEnum.ERROR.getMessage());
        return  r;
    }

    /**
     * 传入错误类型
     * @param code
     * @param msg
     * @return
     */
    public static R error(int code, String msg) {
        R r = new R(code, msg);
        return r;
    }
    /**
     * 传入错误枚举类型
     * @param responseEnum
     * @return
     */
    public static R error(ResponseEnum responseEnum){
        R r = new R(responseEnum.getCode(), responseEnum.getMessage());
        // r.put("code", responseEnum.getCode());
        // r.put("message", responseEnum.getMessage());
        return r;
    }
    /**
     * 放入数据
     * @param key 键值
     * @param value 放入的数据
     * @return
     */
    public R put(String key, Object value) {
        super.put(key, value);
        return this;
    }
    /**
     * 独立设置提示信息  **(其实没必要有这个)**
     * @param message
     * @return
     */
    public  R message(String message){
        super.put("message", message);
        return this;
    }

    /**
     * 独立设置状态码 **(其实没必要有这个)**
     * @param code
     * @return
     */
    public  R code(Integer code){
        super.put("code", code);
        return this;
    }

}
